package com.alpha.schema.beans;

import lombok.Data;
import lombok.experimental.Accessors;

import java.util.Objects;

/**
 * 元数据外键属性定义
 *
 * @author chenruwan
 * @since 2022-01-01
 */
@Data
@Accessors(chain = true)
public class Foreign {
    /** 控制字段顺序，根据 schema 配置自动解析 */
    private int sequence;
    /** 字段名 */
    private String key;
    /** 引用外键：表名(列名) */
    private String references;
    /** 描述 */
    private String desc;
    /** 是否非空，对应 schema 的 not-null 属性 */
    private String notNull;
    /** 默认值，对应 schema 的 default 属性 */
    private String defVal;
    /** 列表是否显示 */
    private String visible;
    /** 详情是否隐藏 */
    private String hidden;
    /** 是否创建外键约束 */
    private String constrained;

    /**
     * 判断是否需要更改表结构
     */
    public boolean isDifferentFrom(Foreign other) {
        if (this == other) {
            return false;
        }
        return (!Objects.equals(this.getReferences(), other.getReferences()) ||
                !Objects.equals(this.getNotNull(), other.getNotNull()) ||
                !Objects.equals(this.getDefVal(), other.getDefVal()) ||
                !Objects.equals(this.getDesc(), other.getDesc()) ||
                !Objects.equals(this.getConstrained(), other.getConstrained()));
    }

    public String tableOfReferences() {
        return references.replaceAll("\\(.*\\)", "").trim();
    }

    public String indexOfReferences() {
        return references.substring(references.indexOf('(') + 1, references.indexOf(')'));
    }
}
